import Cookies from 'js-cookie'
import { Message } from 'element-ui'
let MapUtil = {
    CONSTANT: {
        container: 'allmap',
        DEFAULT_ZOOM: 10,
        MAP_TYPE: 'BMAP_NORMAL_MAP',
        MAX_ZOOM: 13,
        MIN_ZOOM: 8,
        // 多边形的样式
        polygonstyleOptions: {
            strokeColor: '#418fdc', // 边线颜色。
            fillColor: '	#ebf6fa', // 填充颜色。当参数为空时，圆形将没有填充效果。
            strokeWeight: 1, // 边线的宽度，以像素为单位。
            strokeOpacity: 0.9, // 边线透明度，取值范围0 - 1。
            fillOpacity: 0.5, // 填充的透明度，取值范围0 - 1。
            strokeStyle: 'solid' // 边线的样式，solid或dashed。
        },
        // 画线的样式
        linestyleOptions: {
            strokeColor: 'red', // 边线颜色。
            fillColor: '	#BBFFFF', // 填充颜色。当参数为空时，圆形将没有填充效果。
            strokeWeight: 1, // 边线的宽度，以像素为单位。
            strokeOpacity: 0.8, // 边线透明度，取值范围0 - 1。
            fillOpacity: 0.6, // 填充的透明度，取值范围0 - 1。
            strokeStyle: 'solid' // 边线的样式，solid或dashed。
        },
        // 画矩形的样式
        rectstyleOptions: {
            strokeColor: '#17a12b', // 边线颜色。
            fillColor: '	#ffffff', // 填充颜色。当参数为空时，圆形将没有填充效果。
            strokeWeight: 1, // 边线的宽度，以像素为单位。
            strokeOpacity: 0.9, // 边线透明度，取值范围0 - 1。
            fillOpacity: 0.6, // 填充的透明度，取值范围0 - 1。
            strokeStyle: 'solid' // 边线的样式，solid或dashed。
        },
        // 画圆的样式
        circleOptions: {
            strokeColor: '#17a12b', // 边线颜色。
            fillColor: '	#ffffff', // 填充颜色。当参数为空时，圆形将没有填充效果。
            strokeWeight: 1, // 边线的宽度，以像素为单位。
            strokeOpacity: 0.9, // 边线透明度，取值范围0 - 1。
            fillOpacity: 0.6, // 填充的透明度，取值范围0 - 1。
            strokeStyle: 'solid' // 边线的样式，solid或dashed。
        }
    },
    // 初始化地图
    initMap: function (centerLng, centerLat) {
        let map = new BMap.Map(this.CONSTANT.container, {
            minZoom: this.CONSTANT.MIN_ZOOM,
            maxZoom: this.CONSTANT.MAX_ZOOM
        })
        // 初始化地图,设置中心点坐标和地图级别
        map.centerAndZoom(new BMap.Point(centerLng, centerLat), this.CONSTANT.DEFAULT_ZOOM)
        return map
    }
}

MapUtil.tool = {
    /**
     *创建鼠标绘制
     */
    createDrawingManager: (map, drawMode) => {
        const drawingManager = new BMapLib.DrawingManager(map, {
            isOpen: false, // 是否开启绘制模式
            // enableDrawingTool: true, //是否显示工具栏
            drawingToolOptions: {
                anchor: BMAP_ANCHOR_TOP_RIGHT, // 位置
                offset: new BMap.Size(5, 5) // 偏离值
            },
            circleOptions: MapUtil.CONSTANT.circleOptions, // 圆的样式
            polylineOptions: MapUtil.CONSTANT.linestyleOptions, // 线的样式
            polygonOptions: MapUtil.CONSTANT.polygonOptions, // 多边形的样式
            rectangleOptions: MapUtil.CONSTANT.rectstyleOptions // 矩形的样式
        })
        drawingManager.setDrawingMode(drawMode)
        return drawingManager
    },
    /**
     * 创建普通标注
     */
    createMarker: function (point, img) {
        var marker = new BMap.Marker(point)
        marker.setIcon(
            new BMap.Icon(img, new BMap.Size(24, 28), {
                imageOffset: new BMap.Size(0, 0),
                imageSize: new BMap.Size(24, 28)
            })
        )
        marker.setShadow(new BMap.Icon(img, new BMap.Size(0, 0), {}))
        return marker
    },
    // 创建带label的marker
    createMarkerWithLabel: function (point, icon, map, content) {
        var marker = new BMap.Marker(point, {
            icon: icon
        })
        return marker
    },
    // 地图上删除点的标注
    removeMarker (map, x, y) {
        var allOverlay = map.getOverlays()
        for (var i = 0; i < allOverlay.length; i++) {
            if (allOverlay[i].toString() == '[object Marker]') {
                var point = allOverlay[i].getPosition()
                if (point.lng == x && point.lat == y) {
                    map.removeOverlay(allOverlay[i])
                    break
                }
            }
        }
    },
    // 将搜索结果添加到地图(含有地理属性的对象)
    addToMap (params) {
        let MapJyRk = []
        if (
            Cookies.get('MapReloadData') === '' ||
            Cookies.get('MapReloadData') === null ||
            Cookies.get('MapReloadData') === undefined
        ) {
            MapJyRk = []
        } else {
            MapJyRk = JSON.parse(Cookies.get('MapReloadData'))
        }
        // 判断是否重复
        let index = _.findIndex(MapJyRk, {
            longitude: params.longitude,
            latitude: params.latitude,
            rowkey: params.rowkey
        })
        if (index === -1) {
            MapJyRk.push(params)
            Cookies.set('MapReloadData', JSON.stringify(MapJyRk))
            Message({ showClose: true, message: '添加成功', type: 'success', duration: 2000 })
            return true
        } else {
            Message({ showClose: true, message: '已添加', type: 'error', duration: 2000 })
            return false
        }
    },
    // 获取添加到地图上的marker
    getMarkersInMap () {
        if (
            !(
                Cookies.get('MapReloadData') === '' ||
                Cookies.get('MapReloadData') === null ||
                Cookies.get('MapReloadData') === undefined
            )
        ) {
            return JSON.parse(Cookies.get('MapReloadData'))
        }
    },
    // 清除添加到地图上的marker
    removeMarkersInMap () {
        Cookies.remove('MapReloadData')
    }
}

export default MapUtil
